package com.cky.software.wubaihe.pay;

import java.util.*;

public class PayVersion2 {
    public static void main(String[] args) {
        register();
    }

    // 1. 注册
    public static void register() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("WU_BAIHE");
        userInfo.setPassword(UUID.randomUUID().toString());
        userInfo.setEmail("1933462500@qq.com");
        System.out.println(" 注册成功 !");
        login(userInfo);
    }

    // 2. 登录
    public static void login(UserInfo userInfo) {
        String name = "WU_BAIHE";
        if (userInfo.getUsername().equals(name)) {
            System.out.println("  登录成功 !");
            shopList();
        } else {
            System.out.println(" 登录失败 !");
        }
    }

    // 3. 商品清单
    public static void shopList() {

        // 通过全局变量 shopMap 存入以下4组数据
        Map<String, Object> map = new HashMap<>();
        map.put("猪肉", 20);
        map.put("苹果", 8.2);
        map.put("香蕉", 10);
        System.out.println(" 商品列表: " + map);
        payList(map);
    }

    // 4. 购物车清单
    public static void payList(Map<String, Object> map) {

        // 初始化 List
        List<String> list = new ArrayList<>();

        Map<String, Object> payMap = new HashMap<>();

        // 循环遍历 shopList 方法传递过来的数据
        map.forEach((key, value) -> {
            if (key.equals("猪肉")) {

                // 将 shopList 中的 猪肉 存放到购物清单中
                payMap.put(key, value);

                // 存到购物清单后需要移除原购物清单中的数据,这里需要将其存放在 List 中
                list.add(key);
            } else if (key.equals("苹果")) {
                payMap.put(key, value);
                list.add(key);
            }
        });

        System.out.println("map - test:" + list.size());

        // 获取 List 中待删除的数据

        for (String s : list) {
            map.remove(s);
        }
//        map.remove(list.get(0));
//        map.remove(list.get(1));

        System.out.println(" 购物车: " + payMap);
        System.out.println(" 商品列表剩余商品: " + map);

        check(payMap);
    }

    // 5. 下单支付列
    public static void check(Map<String, Object> map) {

        // 初始化 List
        List<String> list = new ArrayList<>();
        Map<String, Object> checkMap = new HashMap<>();

        /// 循环遍历 payList 方法传递过来的数据
        map.forEach((key, value) -> {
            if (key.equals("猪肉")) {

                // 将 payList 中为 猪肉 的数据存入 checkMap 下单支付容器中
                checkMap.put(key, value);

                // 下单支付后需要将原本购物清单中的数据删除，这里需要先放到 List 中
                list.add(key);
            }
        });

        // 获取 List 中的数据，将其删除
        map.remove(list.get(0));

        System.out.println(" 下单支付了: " + checkMap);
        System.out.println(" 购物车列表剩余数据: " + map);

        result(checkMap);
    }

    // 6. 打印单据
    public static void result(Map<String, Object> map) {
        System.out.println(" 单据: " + map);
    }
}
